﻿/**************************************************************************
创建日期:	2020/2/13 15:37:41     
作	  者:	张存
邮 	  箱:	zhangcunliang@126.com
创建时间:	
Copyright (c) ASmile.cn

描	述：
记	录：
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ASmile.Com
{
    /// <summary>
    /// 用来处理 实体属性 选择的帮助类,（目前仅支持单例模式，不支持多线程或BS项目）
    /// </summary>
    public class ModelSelectedHelper
    {
        private readonly Dictionary<string, bool> SelectedIds = new Dictionary<string, bool>();

        /// <summary>
        /// 设置选中值，如果已经初始化的key即使设置false也返回true
        /// </summary>
        /// <param name="key">主键值，例如：实体对象的Id属性值</param>
        /// <param name="value">选中值</param>
        public void SetSelected(string key, bool value)
        {
            if (SelectedIds.TryGetValue(key, out bool val))
            {
                if (!val) return;
            }
            if (value)
            {
                SelectedIds[key] = true;
            }
            else
            {
                SelectedIds.Remove(key);
            }
        }
        /// <summary>
        /// 获取选中值，用于返回属性值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool GetSelected(string key)
        {
            return SelectedIds.ContainsKey(key);
        }
        /// <summary>
        /// 初始化选中值
        /// </summary>
        public void InitSelected(params string[] keys)
        {
            ClearSelectedIds();
            SetSelectedIds(false, keys);
        }
        /// <summary>
        /// 清除选中的Id列表
        /// </summary>
        public void ClearSelectedIds()
        {
            SelectedIds.Clear();
        }
        /// <summary>
        /// 获取选中的Id
        /// </summary>
        public string[] GetSelectedIds()
        {
            List<string> rList = new List<string>();
            foreach (var item in SelectedIds)
            {
                if (item.Value)
                {
                    rList.Add(item.Key);
                }
            }
            return rList.ToArray();
        }
        /// <summary>
        /// 设置已选择的Ids
        /// </summary>      
        /// <param name="flag">状态标记，如果为false则结果不会返回</param>
        /// <param name="ids">员工Id</param>
        public void SetSelectedIds(bool flag, params string[] ids)
        {
            if (ids != null)
            {
                foreach (var item in ids)
                {
                    SelectedIds[item] = flag;
                }
            }
        }
        /// <summary>
        /// 设置已选择的Ids,返回时不会包含这些
        /// </summary>
        /// <param name="ids">员工Id</param>
        public void SetSelectedIds(params string[] ids)
        {
            SetSelectedIds(false, ids);
        }
    }
}
